[编程题]a/b
  • 热度指数:4585 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
求 a/b 的小数表现形式。如果 a 可以整除 b 则不需要小数点。如果是有限小数,则可以直接输出。如果是无限循环小数,则需要把小数循环的部分用"()"括起来。

数据范围:

输入描述:
两个整数a和b,其中

0 <= a <= 1000 000

1 <= b <= 10 000


输出描述:
一个字符串,该分数的小数表现形式
示例1

输入

10 1

输出

10

说明

10/1 = 10 
示例2

输入

1 2

输出

0.5

说明

1/2 = 0.5 
示例3

输入

1 3

输出

0.(3)

说明

1/3 = 0.333333... 
示例4

输入

1 6

输出

0.1(6)

说明

1/6 = 0.16666666.... 
示例5

输入

1 7

输出

0.(142857)

说明

1 / 7 = 0.1428571428... 
# 精华答案的Python版
def compute():
    a,b = list(map(int,input().split()))
    mod = a % b
    quo1 = a // b
    # 如果整除
    if not mod: return quo1
    modList = []
    # 如果非整除
    while mod:
        # 将余数储存在列表
        modList.append(mod)
        mod = mod*10 % b
        # 如果余数出现两次
        if mod in modList:
            # 循环开始的位置为i
            loopStartIdx = modList.index(mod)
            # format result
            quo2 = str(quo1) + '.'
            for i in range(loopStartIdx):
                quo2 += str(modList[i]*10//b)
            quo2 += '('
            for i in range(loopStartIdx,len(modList)):
                quo2 += str(modList[i]*10//b)
            return quo2 + ')'
        
print(compute())

发表于 2021-08-27 15:59:35 回复(0)